package pe.com.bbva.ge.vista.vaadin.ui;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import pe.com.bbva.ge.domain.configuracion.Lista;
import pe.com.bbva.ge.domain.configuracion.Valor;
import pe.com.bbva.ge.domain.solicitud.Destino;
import pe.com.bbva.ge.domain.solicitud.DetalleMoneda;
import pe.com.bbva.ge.domain.solicitud.EstadoSolicitud;
import pe.com.bbva.ge.domain.solicitud.Solicitud;
import pe.com.bbva.ge.negocio.ConfiguracionNegocio;
import pe.com.bbva.ge.negocio.SolicitudNegocio;
import pe.com.bbva.ge.utileria.form.BandejaTrabajoForm;
import pe.com.bbva.ge.vista.vaadin.ui.solicitud.SolicitudesUI;
import pe.com.bbva.ge.vista.vaadin.ui.utileria.YesNoDialog;

import com.bibounde.vprotovis.BarChartComponent;
import com.cdainfo.vaadin.TablaFiltro;
import com.cdainfo.vaadin.container.CDAIndexedContainer;
import com.cdainfo.vaadin.event.TablaFiltroEnterEvent;
import com.cdainfo.vaadin.listener.TablaFiltroEnterListener;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.terminal.Sizeable;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import com.vaadin.terminal.gwt.server.WebBrowser;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.VerticalSplitPanel;
import com.vaadin.ui.Window;

public class BandejaDeTrabajoUI extends VentanaUI implements ClickListener, TablaFiltroEnterListener {

	@AutoGenerated
	private VerticalLayout mainLayout;

	@AutoGenerated
	private VerticalSplitPanel vsplit;

	@AutoGenerated
	private VerticalLayout vlyTablaSolicitudes;

	@AutoGenerated
	private Panel pnlGrillaPrincipal;

	@AutoGenerated
	private VerticalLayout verticalLayout_3;

	@AutoGenerated
	private TablaFiltro tblBandejaTrabajo;

	@AutoGenerated
	private HorizontalLayout hlyBotonesTablaSolicitudes;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;

	@AutoGenerated
	private Button btnConfirmar;

	@AutoGenerated
	private Button btnRechazar;

	@AutoGenerated
	private Button btnBuscar;

	@AutoGenerated
	private HorizontalLayout hlyCuadroEstadistico;

	@AutoGenerated
	private HorizontalLayout hlyBotonesCuadroEstadistico;

	@AutoGenerated
	private Button btnCuadroEstadistico;

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	/**
	 * The constructor should first build the main layout, set the composition
	 * root and then do any custom initialization.
	 * 
	 * The constructor will not be automatically regenerated by the visual
	 * editor.
	 */

	// private HorizontalLayout lytbotonesCuadroEstadistico;
	// private HorizontalLayout lytCuadroEstadistico;
	// private HorizontalLayout lytTablaSolicitues;
	// private VerticalSplitPanel vsplit;
	// private Panel pnlGrillaPrincipal;

	@Autowired
	private SolicitudNegocio gestionarSolicitudNegocio;

	@Autowired
	private ConfiguracionNegocio genericoNegocio;

	private CDAIndexedContainer container;
	/*private List<Solicitud> listaSolicitudes;
	private List<Valor> monedas;
	*/
	private boolean mostrarCuadro;

	static final Action NUEVA_SOLICITUD = new Action("Nueva Solicitud");
	static final Action MODIFICAR_SOLICITUD = new Action("Modificar Solicitud");
	static final Action ELIMINAR_SOLICITUD = new Action("Eliminar Solicitud");
	static final Action VER_SOLICITUD = new Action("Ver Solicitud");
	static final Action VER_REMITOS = new Action("Ver Remitos");
	static final Action VER_ANOMALIAS = new Action("Ver Anomalías");
	static final Action VER_PEDIDOS_ATM = new Action("Ver pedidos ATM");
	/*static final Action[] ITEM_ACTIONS = new Action[] { MODIFICAR_SOLICITUD,
			ELIMINAR_SOLICITUD, VER_SOLICITUD, VER_REMITOS, VER_ANOMALIAS,
			VER_PEDIDOS_ATM };*/
	static final Action[] ITEM_ACTIONS = new Action[] { MODIFICAR_SOLICITUD };
	static final Action[] MULTI_ITEM_ACTIONS = new Action[] { ELIMINAR_SOLICITUD };
	static final Action[] NO_ITEM_ACTIONS = new Action[] { NUEVA_SOLICITUD };
	private Action[] action = NO_ITEM_ACTIONS;

	private static final String COLUMNA_ID = "idSolicitud";
	private static final String COLUMNA_NRO_SOLICITUD = "numeroSolicitud";
	private static final String COLUMNA_TIPO_SOLICITUD = "tipoSolicitud";
	private static final String COLUMNA_ORIGEN = "origen";
	private static final String COLUMNA_DESTINO = "destino";
	private static final String COLUMNA_ESTADO = "estado";
	private static final String COLUMNA_FECHA_ESTADO = "fechaEstado";
	
	public BandejaDeTrabajoUI() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
	}

	public void postConstruccion() {
		generarCuadro();
		generarTablaSolicitudes();
		vsplit.setSplitPosition(0, Sizeable.UNITS_PERCENTAGE);
		vsplit.setWidth("100%");
		vsplit.setHeight("100%");
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		btnCuadroEstadistico.setCaption("+");

		btnBuscar.addListener((ClickListener) this);
		btnRechazar.addListener((ClickListener) this);
		btnConfirmar.addListener((ClickListener) this);
		btnCuadroEstadistico.addListener((ClickListener) this);
		tblBandejaTrabajo.addListener((TablaFiltroEnterListener)this);
	}

	private void generarCuadro() {
		BarChartComponent bar=new BarChartComponent();
		List<Double> lstTotalDenominacion=new ArrayList<Double>();
		lstTotalDenominacion.add(1000d);
		lstTotalDenominacion.add(1500d);
		lstTotalDenominacion.add(500d);
		lstTotalDenominacion.add(1378d);
		double []denominaciones=new double[lstTotalDenominacion.size()];
		int i=0;
		for (Double denominacion:lstTotalDenominacion) {
			denominaciones[i]=denominacion.doubleValue();
			i++;
		}
		//Se setean los acumulados en el cuadro estadistico
		bar.addSerie("Deteriorado", denominaciones);
		bar.addSerie("Circulante", new double[]{500d,1371d,376d,1914d});
		bar.setColors(new String[]{"#b40404", "#0431b4"});
		
		bar.setChartWidth(750d);
		bar.setChartHeight(200d);

		bar.setMarginLeft(50d);
		bar.setMarginBottom(50d);
		bar.setGroupInset(60d);

		bar.setXAxisVisible(true);
		bar.setXAxisLabelVisible(true);		
		bar.setYAxisVisible(true);
		bar.setYAxisLabelVisible(true);
		
		bar.setYAxisLabelStep(300d);
		bar.setYAxisGridVisible(true);

		bar.setLegendVisible(true);
		bar.setLegendAreaWidth(150d);

		bar.setTooltipEnabled(true);
		hlyCuadroEstadistico.addComponent(bar);
		hlyCuadroEstadistico.setComponentAlignment(bar, Alignment.MIDDLE_CENTER);
	}
	
	private void generarTablaSolicitudes() {
		// tblBandejaTrabajo = new TablaFiltro();

		WebApplicationContext context = ((WebApplicationContext) getApplication()
				.getContext());
		WebBrowser webBrowser = context.getBrowser();
		if (webBrowser.isFirefox()) {
			tblBandejaTrabajo.setSeparadorColumna(12);
		}

		tblBandejaTrabajo.setSelectable(true);
		tblBandejaTrabajo.setMultiSelect(true);
		tblBandejaTrabajo.setImmediate(true);		

		container = new CDAIndexedContainer();
		container.addContainerProperty(COLUMNA_ID, Long.class, null);
		container.addContainerProperty(COLUMNA_NRO_SOLICITUD, String.class, null,
				"N° de solicitud", CDAIndexedContainer.TipoComponente.TEXT,
				false, 100);
		container.addContainerProperty(COLUMNA_TIPO_SOLICITUD, String.class, null,
				"Tipo de solicitud", CDAIndexedContainer.TipoComponente.TEXT,
				true, 160);
		container.addContainerProperty(COLUMNA_ORIGEN, String.class, null, "Origen",
				CDAIndexedContainer.TipoComponente.TEXT, true, 160);
		container.addContainerProperty(COLUMNA_DESTINO, String.class, null,
				"Destino", CDAIndexedContainer.TipoComponente.TEXT, true, 160);
		container.addContainerProperty(COLUMNA_ESTADO, String.class, null, "Estado",
				CDAIndexedContainer.TipoComponente.TEXT, true, 100);
		container.addContainerProperty(COLUMNA_FECHA_ESTADO, String.class, null,
				"Fecha Estado", CDAIndexedContainer.TipoComponente.DATEPICKER,
				false, 80);

		List<Valor> monedas = genericoNegocio.obtenerValores(Lista.CODIGO.DIVISA);

		for (Valor moneda : monedas) {
			container.addContainerProperty(moneda.getCodigo(),
					BigDecimal.class, null, "Monto " + moneda.getNombre(),
					CDAIndexedContainer.TipoComponente.TEXT, false, 110);
		}

		tblBandejaTrabajo.setContainerDataSource(container);
		tblBandejaTrabajo.setColumnCollapsingAllowed(true);
		tblBandejaTrabajo.setColumnReorderingAllowed(true);

		buscarSolicitudes(new HashMap<String, Object>());

		tblBandejaTrabajo.addListener(new ValueChangeListener() {

			@Override
			public void valueChange(ValueChangeEvent event) {
				Collection value = (Collection) event.getProperty().getValue();

				if (value.size() == 1) {
					tblBandejaTrabajo.removeAllActionHandlers();
					action = ITEM_ACTIONS;
					asignaActionHandler();
				} else {
					tblBandejaTrabajo.removeAllActionHandlers();
					action = MULTI_ITEM_ACTIONS;
					asignaActionHandler();
				}

				tblBandejaTrabajo.requestRepaintTable();
			}
		});

		tblBandejaTrabajo.setWidth("100%");
		tblBandejaTrabajo.setHeight("100%");
		pnlGrillaPrincipal.setWidth("-1px");
		pnlGrillaPrincipal.setHeight("100%");
		pnlGrillaPrincipal.setScrollable(true);
		pnlGrillaPrincipal.getContent().setHeight("100%");
	}
	
	

	public void buscarSolicitudes(Map<String, Object> datos) {
		
		BandejaTrabajoForm bandejaTrabajoForm = new BandejaTrabajoForm();
		
		Iterator<String> llaves = datos.keySet().iterator();
		
		while (llaves.hasNext()) {
			String llave = llaves.next();
			Object dato = datos.get(llave);
			if(dato == null)
			{
				continue;
			}
			if(llave.startsWith(COLUMNA_NRO_SOLICITUD))
			{
				if(llave.endsWith(TablaFiltro.KEY_INICIAL))
				{
					bandejaTrabajoForm.setNumeroSolicitud1((String)dato);
				}
				else if(llave.endsWith(TablaFiltro.KEY_FINAL))
				{
					bandejaTrabajoForm.setNumeroSolicitud2((String)dato);
				}
			}
			else if(llave.startsWith(COLUMNA_TIPO_SOLICITUD))
			{
				bandejaTrabajoForm.setTipoSolicitud((String)dato);
			}
			else if(llave.startsWith(COLUMNA_ORIGEN))
			{
				bandejaTrabajoForm.setOrigen((String)dato);
			}
			else if(llave.startsWith(COLUMNA_DESTINO))
			{
				bandejaTrabajoForm.setDestino((String)dato);
			}
			else if(llave.startsWith(COLUMNA_ESTADO))
			{
				bandejaTrabajoForm.setEstado((String)dato);
			}
			else if(llave.startsWith(COLUMNA_FECHA_ESTADO))
			{
				if(llave.endsWith(TablaFiltro.KEY_INICIAL))
				{
					bandejaTrabajoForm.setFechaEstado1((Date)dato);
				}
				else if(llave.endsWith(TablaFiltro.KEY_FINAL))
				{
					bandejaTrabajoForm.setFechaEstado2((Date)dato);
				}
			}
			else
			{
				if(StringUtils.isNotEmpty((String)dato))
				{
					BigDecimal bd = new BigDecimal(StringUtils.trimToEmpty((String)dato));
					
					if(llave.endsWith(TablaFiltro.KEY_INICIAL))
					{
						String moneda = StringUtils.trimToEmpty(StringUtils.substringBeforeLast(llave, TablaFiltro.KEY_INICIAL));
						bandejaTrabajoForm.addDivisaInicial(moneda, bd);
					}
					else if(llave.endsWith(TablaFiltro.KEY_FINAL))
					{
						String moneda = StringUtils.trimToEmpty(StringUtils.substringBeforeLast(llave, TablaFiltro.KEY_FINAL));
						bandejaTrabajoForm.addDivisaFinal(moneda, bd);
					}
				}
			}
		}
		
		int i = 0;

		// Cargando Solicitudes
		this.container.removeAllItems();
		//setListaSolicitudes(gestionarSolicitudNegocio.obtenerListaSolicitudes());
		//System.out.println(listaSolicitudes.size());

		List<Solicitud> solicitudes = gestionarSolicitudNegocio.obtenerSolicitudesPendientes(bandejaTrabajoForm);
		
		for (Solicitud solicitud : solicitudes) {
			
			Destino destino = solicitud.getDestinos().get(solicitud.getDestinos().size()-1);
			
			Item item = this.container.addItem(solicitud);

			item.getItemProperty(COLUMNA_ID).setValue(solicitud.getId());
			item.getItemProperty(COLUMNA_NRO_SOLICITUD).setValue(
					solicitud.getNumero()); // "20140210" +
											// String.format("%06d", i));
			item.getItemProperty(COLUMNA_TIPO_SOLICITUD).setValue(
					solicitud.getTipo().getNombre());
			item.getItemProperty(COLUMNA_ORIGEN).setValue(
					solicitud.getOrigen().getNombre());
			item.getItemProperty(COLUMNA_DESTINO).setValue(
					destino.getDestino().getNombre());
			item.getItemProperty(COLUMNA_ESTADO).setValue(
					solicitud.getEstado().getNombre());
			item.getItemProperty(COLUMNA_FECHA_ESTADO).setValue(
					solicitud.getCreacion());

			List<DetalleMoneda> listaDetalleMonedas = gestionarSolicitudNegocio
					.obtenerDetalleMonedas(destino);

			for (DetalleMoneda detalleMoneda : listaDetalleMonedas) {
				item.getItemProperty(detalleMoneda.getMoneda().getCodigo()).setValue(
						detalleMoneda.getTotal());
			}

			i++;
		}
	}

	private void asignaActionHandler() {
		tblBandejaTrabajo.addActionHandler(new Handler() {

			/**
			 * 
			 */
			private static final long serialVersionUID = -6373252406881569655L;

			@Override
			public void handleAction(Action action, Object sender, Object target) {

				//Window wnd;

				/*Collection idItems = (Collection) tblBandejaTrabajo
						.getValue();
				Object itemSeleccionado = null;

				for (Object itemId : idItems) {
					itemSeleccionado = itemId;
				}

				Integer idItem = Integer.valueOf(itemSeleccionado.toString());
				Solicitud solicitudLocal = getListaSolicitudes().get(
						idItem.intValue() - 1);
				Solicitud solicitud = gestionarSolicitudNegocio.obtener(
						solicitudLocal.getId(), Solicitud.class);*/

				if (action.equals(MODIFICAR_SOLICITUD)) {
					
					Set<Solicitud> ids = (Set<Solicitud>) tblBandejaTrabajo
							.getValue();
					Solicitud solicitudSel = ids.iterator().next();
					//Item item = tblBandejaTrabajo.getItem(itemId);
					Long idRequerimiento = solicitudSel.getId();
					
					Solicitud solicitud = gestionarSolicitudNegocio.obtener(
							idRequerimiento, Solicitud.class);
					
					modificarSolicitud(solicitud);
				}

				/*if (action.equals(VER_SOLICITUD)) {
					SolicitudUI aprobarSolicitudUI = new SolicitudUI(solicitud,
							obtenerDeBandeja());
					wnd = new Window("Ver solicitud");
					wnd.addComponent(aprobarSolicitudUI);
					wnd.setWidth("960px");
					wnd.setHeight("650px");
					wnd.setResizable(false);
					wnd.setModal(true);
					getWindow().addWindow(wnd);
				}

				if (action.equals(VER_REMITOS)) {
					RemitoUI remitoUI = new RemitoUI(solicitud, new Valor());
					wnd = new Window("Remitos");
					wnd.addComponent(remitoUI);
					wnd.setWidth("1040px");
					wnd.setHeight("420px");
					wnd.setResizable(false);
					wnd.setModal(true);
					getWindow().addWindow(wnd);
				}

				if (action.equals(VER_ANOMALIAS)) {
					AnomaliaUI anomaliaUI = new AnomaliaUI(solicitud,
							new Valor());
					wnd = new Window("Anomalías");
					wnd.addComponent(anomaliaUI);
					wnd.setWidth("1120px");
					wnd.setHeight("420px");
					wnd.setResizable(false);
					wnd.setModal(true);
					getWindow().addWindow(wnd);
				}

				if (action.equals(VER_PEDIDOS_ATM)) {
					AtmUI atmUI = new AtmUI(solicitud);
					wnd = new Window("Pedidos ATM");
					wnd.addComponent(atmUI);
					wnd.setWidth("1120px");
					wnd.setHeight("520px");
					wnd.setResizable(false);
					wnd.setModal(true);
					getWindow().addWindow(wnd);
				}

				if (action.equals(ELIMINAR_SOLICITUD)) {
					YesNoDialog esNoDialog = new YesNoDialog(
							"Eliminar solicitud",
							"Confirma que desea elimiar la solicitud?", "Si",
							"No", "300px") {

						@Override
						public void yesClick() {
							// TODO Auto-generated method stub

						}

						@Override
						public void noClick() {
							// TODO Auto-generated method stub

						}
					};

					getWindow().addWindow(esNoDialog);
				}*/
			}

			@Override
			public Action[] getActions(Object target, Object sender) {
				return action;
			}
		});
	}

	private void modificarSolicitud(Solicitud solicitud) {
		SolicitudesUI envioSolicitud = new SolicitudesUI();
		envioSolicitud.setSolicitud(solicitud);
		Window wnd;
		wnd = new Window("Modificar Solicitud");
		wnd.addComponent(envioSolicitud);
		wnd.setWidth("1024px");
		wnd.setHeight("700px");
		wnd.setResizable(false);
		wnd.setModal(true);
		getWindow().addWindow(wnd);
	}

	private BandejaDeTrabajoUI obtenerDeBandeja() {
		return this;
	}

	/*public List<Solicitud> getListaSolicitudes() {
		return listaSolicitudes;
	}

	public void setListaSolicitudes(List<Solicitud> listaSolicitudes) {
		this.listaSolicitudes = listaSolicitudes;
	}*/

	public void mostrarCuadroEstadistico() {
		if (mostrarCuadro) {
			this.vsplit.setSplitPosition(0, Sizeable.UNITS_PERCENTAGE);
		} else {
			this.vsplit.setSplitPosition(50, Sizeable.UNITS_PERCENTAGE);
		}

		setMostrarCuadro(isMostrarCuadro() ? false : true);
		btnCuadroEstadistico.setCaption(isMostrarCuadro() ? "-" : "+");
	}

	public boolean isMostrarCuadro() {
		return mostrarCuadro;
	}

	public void setMostrarCuadro(boolean mostrarCuadro) {
		this.mostrarCuadro = mostrarCuadro;
	}

	public void buttonClick(ClickEvent event) {
		if (event.getButton().equals(btnCuadroEstadistico)) {
			mostrarCuadroEstadistico();
		}
		else if (event.getButton().equals(btnBuscar)) {
			buscarSolicitudes(tblBandejaTrabajo.getValues());
		}
		else if (event.getButton().equals(btnConfirmar)) {
			
			if(tblBandejaTrabajo.getValue() != null)
			{
				EstadoSolicitud estadoSolicitudBuscar = new EstadoSolicitud();
				estadoSolicitudBuscar.setCodigo(EstadoSolicitud.CODIGO.EN_PROCESO);
				EstadoSolicitud enProceso = genericoNegocio.obtenerEntidadPorCodigo(estadoSolicitudBuscar, EstadoSolicitud.class);
				
				Collection<Solicitud> seleccionados = (Collection<Solicitud>) tblBandejaTrabajo.getValue();
				for (Solicitud solicitud : seleccionados) {
					solicitud.setEstado(enProceso);
				}
				
				gestionarSolicitudNegocio.grabarTodos( new ArrayList<Solicitud>(seleccionados) );
			}
			
		}
		else if (event.getButton().equals(btnRechazar)) {
			
			if(tblBandejaTrabajo.getValue() != null)
			{
				RechazarSolicitudUI rechazarSolicitudUI = new RechazarSolicitudUI();
				
				Collection<Solicitud> seleccionados = (Collection<Solicitud>) tblBandejaTrabajo.getValue();
				for (Solicitud solicitud : seleccionados) {
					rechazarSolicitudUI.addSolicitud(solicitud);
				}
				
				Window wMensaje = new Window("Rechazo de solicitud");
				wMensaje.addComponent(rechazarSolicitudUI);
				wMensaje.setModal(true);
				wMensaje.setWidth("400px");
				wMensaje.setHeight("280px");
				
				getApplication().getMainWindow().addWindow(wMensaje);
				
			}
		}
	}
	
	@Override
	public void handleEnterAction(TablaFiltroEnterEvent event) {
		Map<String, Object> datos = event.getDatos();
		buscarSolicitudes(datos);
	}

	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("540px");
		mainLayout.setHeight("460px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("540px");
		setHeight("460px");
		
		// hlyBotonesCuadroEstadistico
		hlyBotonesCuadroEstadistico = buildHlyBotonesCuadroEstadistico();
		mainLayout.addComponent(hlyBotonesCuadroEstadistico);
		
		// vsplit
		vsplit = buildVsplit();
		mainLayout.addComponent(vsplit);
		mainLayout.setExpandRatio(vsplit, 1.0f);
		
		return mainLayout;
	}

	@AutoGenerated
	private HorizontalLayout buildHlyBotonesCuadroEstadistico() {
		// common part: create layout
		hlyBotonesCuadroEstadistico = new HorizontalLayout();
		hlyBotonesCuadroEstadistico.setImmediate(false);
		hlyBotonesCuadroEstadistico.setWidth("100.0%");
		hlyBotonesCuadroEstadistico.setHeight("-1px");
		hlyBotonesCuadroEstadistico.setMargin(false);
		
		// btnCuadroEstadistico
		btnCuadroEstadistico = new Button();
		btnCuadroEstadistico.setCaption("Button");
		btnCuadroEstadistico.setImmediate(true);
		btnCuadroEstadistico.setWidth("-1px");
		btnCuadroEstadistico.setHeight("-1px");
		hlyBotonesCuadroEstadistico.addComponent(btnCuadroEstadistico);
		
		return hlyBotonesCuadroEstadistico;
	}

	@AutoGenerated
	private VerticalSplitPanel buildVsplit() {
		// common part: create layout
		vsplit = new VerticalSplitPanel();
		vsplit.setImmediate(false);
		vsplit.setWidth("100.0%");
		vsplit.setHeight("100.0%");
		vsplit.setMargin(false);
		
		// hlyCuadroEstadistico
		hlyCuadroEstadistico = new HorizontalLayout();
		hlyCuadroEstadistico.setImmediate(false);
		hlyCuadroEstadistico.setWidth("100.0%");
		hlyCuadroEstadistico.setHeight("100.0%");
		hlyCuadroEstadistico.setMargin(false);
		vsplit.addComponent(hlyCuadroEstadistico);
		
		// vlyTablaSolicitudes
		vlyTablaSolicitudes = buildVlyTablaSolicitudes();
		vsplit.addComponent(vlyTablaSolicitudes);
		
		return vsplit;
	}

	@AutoGenerated
	private VerticalLayout buildVlyTablaSolicitudes() {
		// common part: create layout
		vlyTablaSolicitudes = new VerticalLayout();
		vlyTablaSolicitudes.setImmediate(false);
		vlyTablaSolicitudes.setWidth("100.0%");
		vlyTablaSolicitudes.setHeight("100.0%");
		vlyTablaSolicitudes.setMargin(false);
		
		// hlyBotonesTablaSolicitudes
		hlyBotonesTablaSolicitudes = buildHlyBotonesTablaSolicitudes();
		vlyTablaSolicitudes.addComponent(hlyBotonesTablaSolicitudes);
		
		// pnlGrillaPrincipal
		pnlGrillaPrincipal = buildPnlGrillaPrincipal();
		vlyTablaSolicitudes.addComponent(pnlGrillaPrincipal);
		vlyTablaSolicitudes.setExpandRatio(pnlGrillaPrincipal, 1.0f);
		
		return vlyTablaSolicitudes;
	}

	@AutoGenerated
	private HorizontalLayout buildHlyBotonesTablaSolicitudes() {
		// common part: create layout
		hlyBotonesTablaSolicitudes = new HorizontalLayout();
		hlyBotonesTablaSolicitudes.setImmediate(false);
		hlyBotonesTablaSolicitudes.setWidth("100.0%");
		hlyBotonesTablaSolicitudes.setHeight("28px");
		hlyBotonesTablaSolicitudes.setMargin(false);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		hlyBotonesTablaSolicitudes.addComponent(horizontalLayout_1);
		
		return hlyBotonesTablaSolicitudes;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("260px");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		
		// btnBuscar
		btnBuscar = new Button();
		btnBuscar.setCaption("Buscar");
		btnBuscar.setImmediate(true);
		btnBuscar.setWidth("-1px");
		btnBuscar.setHeight("-1px");
		horizontalLayout_1.addComponent(btnBuscar);
		
		// btnRechazar
		btnRechazar = new Button();
		btnRechazar.setCaption("Rechazar");
		btnRechazar.setImmediate(true);
		btnRechazar.setWidth("-1px");
		btnRechazar.setHeight("-1px");
		horizontalLayout_1.addComponent(btnRechazar);
		
		// btnConfirmar
		btnConfirmar = new Button();
		btnConfirmar.setCaption("Confirmar");
		btnConfirmar.setImmediate(true);
		btnConfirmar.setWidth("-1px");
		btnConfirmar.setHeight("-1px");
		horizontalLayout_1.addComponent(btnConfirmar);
		
		return horizontalLayout_1;
	}

	@AutoGenerated
	private Panel buildPnlGrillaPrincipal() {
		// common part: create layout
		pnlGrillaPrincipal = new Panel();
		pnlGrillaPrincipal.setImmediate(false);
		pnlGrillaPrincipal.setWidth("100.0%");
		pnlGrillaPrincipal.setHeight("100.0%");
		
		// verticalLayout_3
		verticalLayout_3 = buildVerticalLayout_3();
		pnlGrillaPrincipal.setContent(verticalLayout_3);
		
		return pnlGrillaPrincipal;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_3() {
		// common part: create layout
		verticalLayout_3 = new VerticalLayout();
		verticalLayout_3.setImmediate(false);
		verticalLayout_3.setWidth("100.0%");
		verticalLayout_3.setHeight("100.0%");
		verticalLayout_3.setMargin(false);
		
		// tblBandejaTrabajo
		tblBandejaTrabajo = new TablaFiltro();
		tblBandejaTrabajo.setImmediate(false);
		tblBandejaTrabajo.setWidth("-1px");
		tblBandejaTrabajo.setHeight("100.0%");
		verticalLayout_3.addComponent(tblBandejaTrabajo);
		
		return verticalLayout_3;
	}

}
